var RFC_SPEED = 25; // 25
var RFC_RESTART_DELAY = 1500;
var RFC_Y_OUT = 1000;
var RFC_Y_OFFSET = 4;
var RFC_OPACITY = 0.50;
var RFC_BORN_TIME = 2000;
var RFC_WHERE_BORN = -50;
var RFC_DRIPS_DENSITY = 30; // mayor numero --> menos densidad
var RFC_OPEN_IN_NEW_TAB = true;
var RFC_DBL_CLICK_ON = true;

var RFC_ON = true;

var oRainFox = {
	drivers: [],
	get_word: function()
	{
		// Obtenemos el texto seleccionado
		var focusedWindow = document.commandDispatcher.focusedWindow;
		var word = focusedWindow.getSelection.call(focusedWindow).toString();
		// Si se obtuvo texto, lanzamos
		if (word && word.length)
		{
			// Lanzamos un hilo
			setTimeout(function(){oRainFox.run(word);},1);
		}
	},
	run: function(word)
	{
		// Si no está activado salimos
		//if (!RFC_ON) return;
		if (!RF_PLUGIN.enabled()) return;
		// Obtenemos el documento actual
		//var doc = get_document();
		var doc = RF_DOM.doc();
		// Si no está creado el RainFoxDoc, lo creamos
		if (!doc.RainFox)
			doc.RainFox = new oRainFoxDoc(doc,oRainFox.drivers);
		// Hacemos llover ;)
		doc.RainFox.rain(word);
	},
	
	freeze: function() {
		var doc = RF_DOM.doc();
		if (doc.RainFox) {
			doc.RainFox.locked = !doc.RainFox.locked;
			$('rf-freeze-status').setAttribute("checked", doc.RainFox.locked);
		}
	},
	
	killall: function() {
		var doc = RF_DOM.doc();
		if (doc.RainFox) {
			for (var i=0; i<doc.RainFox.drops.length; i++) {
				var o = doc.RainFox.drops[i];
				if (o && o.parentNode)
					drop_die(o, o.BORN);
			}
			doc.RainFox.drops = [];
			doc.RainFox.num_drops = 0;
			//delete doc.RainFox;
		}
	},
	
	// ---------------------------------------------------------------
	// Función drip: goteo - hace gotear una gota
	drip: function()
	{
		//var doc = get_document();
		var doc = RF_DOM.doc();
		if (!doc.RainFox)
		{
			return;
		}

		if (doc.RainFox.INTERVAL_DRIP) return;
		
		doc.RainFox.INTERVAL_DRIP = setInterval( function(){
			if (doc.RainFox.num_drops<doc.RainFox.MAX_DRIPS_PER_DOC && doc.RainFox.drops.length>0)
			{
				// Añadimos la gota a la pantalla
				doc.RainFox.num_drops++;
				
				// Sacamos una gota de la cola de gotas en memoria
				var drop = doc.RainFox.get_drop();
				
				// Se obtiene una coordenada X aleatoria
				drop.style.position = 'absolute';
				//drop.style.left = get_random(doc.body.offsetWidth-150)+'px';
				drop.style.left = RF_MATH.random(doc.body.offsetWidth-150)+'px';
				drop.style.top = RFC_WHERE_BORN+'px';
				drop.TOP = RFC_WHERE_BORN;
				
				// Mostramos la gota - la metemos en el documento
				doc.body.appendChild(drop);

				// Lanzamos la gota
				drop_fall(drop);
			}
			else
			{
				clearInterval(doc.RainFox.INTERVAL_DRIP);
				doc.RainFox.INTERVAL_DRIP = null;
			}
		},RFC_BORN_TIME);
	},
};

window.addEventListener("dblclick", function()
{
	if (RFC_DBL_CLICK_ON) {
		oRainFox.get_word();
	}
}, false);